{"componentChunkName":"component---src-templates-blog-page-index-tsx","path":"/sistema-de-cofre/","result":{"data":{"mdx":{"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"layout\": \"BlogPage\",\n  \"title\": \"Como criar um sistema de Cofre\",\n  \"description\": \"Nesse artigo iremos aprender a como criar um sistema de cofre para seu projeto, token ou jogo NFT.\",\n  \"image\": \"capa.jpg\",\n  \"tags\": [\"Intermediário\", \"DeFi\"],\n  \"author\": [\"Matheus\"],\n  \"publishedAt\": \"18/07/2022\",\n  \"modifiedAt\": \"20220718\",\n  \"suburl\": \"sistema-de-cofre/\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Nesse artigo iremos aprender a como criar um sistema de Staking de Cofres para seu projeto, token ou jogo NFT.\"), mdx(\"h2\", {\n    \"id\": \"sistema-de-cofres\"\n  }, \"Sistema de Cofres\"), mdx(\"p\", null, \"Exemplo simples de contrato de cofre, comumente usado em protocolos DeFi.\", mdx(\"br\", null), \"\\nA maioria dos cofres na rede principal s\\xE3o mais complexos. Aqui vamos nos concentrar na matem\\xE1tica para calcular as a\\xE7\\xF5es a serem cunhadas no dep\\xF3sito e a quantidade de token a ser retirada.\"), mdx(\"h3\", {\n    \"id\": \"como-funciona-o-contrato-de-cofre\"\n  }, \"Como funciona o contrato de Cofre?\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Alguma quantidade de a\\xE7\\xF5es \\xE9 cunhada quando um usu\\xE1rio deposita.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"O protocolo DeFi usaria os dep\\xF3sitos dos usu\\xE1rios para gerar rendimento (de alguma forma).\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"O usu\\xE1rio queima a\\xE7\\xF5es para retirar seus tokens + rendimento.\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.13;\\n\\ncontract Vault {\\n    IERC20 public immutable token;\\n\\n    uint public totalSupply;\\n    mapping(address => uint) public balanceOf;\\n\\n    constructor(address _token) {\\n        token = IERC20(_token);\\n    }\\n\\n    function _mint(address _to, uint _shares) private {\\n        totalSupply += _shares;\\n        balanceOf[_to] += _shares;\\n    }\\n\\n    function _burn(address _from, uint _shares) private {\\n        totalSupply -= _shares;\\n        balanceOf[_from] -= _shares;\\n    }\\n\\n    function deposit(uint _amount) external {\\n        /*\\n        a = quantia\\n        B = saldo de tokens antes do dep\\xF3sito\\n        T = total supply\\n        s = shares para mintar\\n\\n        (T + s) / T = (a + B) / B \\n\\n        s = aT / B\\n        */\\n        uint shares;\\n        if (totalSupply == 0) {\\n            shares = _amount;\\n        } else {\\n            shares = (_amount * totalSupply) / token.balanceOf(address(this));\\n        }\\n\\n        _mint(msg.sender, shares);\\n        token.transferFrom(msg.sender, address(this), _amount);\\n    }\\n\\n    function withdraw(uint _shares) external {\\n        /*\\n        a = quantia\\n        B = saldo de tokens antes do saque\\n        T = total supply\\n        s = shares para queimar\\n\\n        (T - s) / T = (B - a) / B \\n\\n        a = sB / T\\n        */\\n        uint amount = (_shares * token.balanceOf(address(this))) / totalSupply;\\n        _burn(msg.sender, _shares);\\n        token.transfer(msg.sender, amount);\\n    }\\n}\\n\\ninterface IERC20 {\\n    function totalSupply() external view returns (uint);\\n\\n    function balanceOf(address account) external view returns (uint);\\n\\n    function transfer(address recipient, uint amount) external returns (bool);\\n\\n    function allowance(address owner, address spender) external view returns (uint);\\n\\n    function approve(address spender, uint amount) external returns (bool);\\n\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint amount\\n    ) external returns (bool);\\n\\n    event Transfer(address indexed from, address indexed to, uint amount);\\n    event Approval(address indexed owner, address indexed spender, uint amount);\\n}\\n\")), mdx(\"br\", null), mdx(\"h3\", {\n    \"id\": \"testar-no-remix\"\n  }, \"Testar no \", mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"https://remix.ethereum.org/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"Remix\")), mdx(\"br\", null), mdx(\"br\", null));\n}\n;\nMDXContent.isMDXComponent = true;","frontmatter":{"title":"Como criar um sistema de Cofre","description":"Nesse artigo iremos aprender a como criar um sistema de cofre para seu projeto, token ou jogo NFT.","image":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIEA//EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAbKN2FGD/8QAGhAAAgIDAAAAAAAAAAAAAAAAAhIBEQQQIf/aAAgBAQABBQIZrINxEbVYbuv/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAcEAACAgIDAAAAAAAAAAAAAAABEQACMVEDEBL/2gAIAQEABj8CIPITazQ1GHY6geZ6AD3M9f/EABwQAAICAgMAAAAAAAAAAAAAAAERACEQMUFh8f/aAAgBAQABPyFlII6CESkcKcIiCksTUDquLwx//9oADAMBAAIAAwAAABDAz//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EAB8QAQACAQMFAAAAAAAAAAAAAAEAESEQQVFhgZHR8P/aAAgBAQABPxAbXwNnMCbPrrGnEsrXkRiDBSrHtiZyGU0qOLn0Gn//2Q==","aspectRatio":1.5151515151515151,"src":"/static/8b6e2c4e5798594e93b566abaad54ae3/0cb3d/capa.jpg","srcSet":"/static/8b6e2c4e5798594e93b566abaad54ae3/f836f/capa.jpg 200w,\n/static/8b6e2c4e5798594e93b566abaad54ae3/2244e/capa.jpg 400w,\n/static/8b6e2c4e5798594e93b566abaad54ae3/0cb3d/capa.jpg 536w","sizes":"(max-width: 536px) 100vw, 536px"}}},"tags":["Intermediário","DeFi"],"author":["Matheus"],"suburl":"sistema-de-cofre/","publishedAt":"18/07/2022","modifiedAt":"20220718"},"tableOfContents":{"items":[{"url":"#sistema-de-cofres","title":"Sistema de Cofres","items":[{"url":"#como-funciona-o-contrato-de-cofre","title":"Como funciona o contrato de Cofre?"},{"url":"#testar-no-remix","title":"Testar no Remix"}]}]},"timeToRead":1},"allMdx":{"nodes":[{"frontmatter":{"suburl":"sistema-de-swap-estavel-amm/","title":"Como criar um sistema de Swap estável AMM","tags":["Avançado","DeFi"]}},{"frontmatter":{"suburl":"produto-constante-amm/","title":"Como criar um produto constante AMM","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"soma-constante-amm/","title":"Como criar uma soma constante AMM","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-cofre/","title":"Como criar um sistema de Cofre","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-staking/","title":"Como criar um sistema de Staking de Recompensas","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-preco-chainlink-oracle/","title":"Como criar um sistema de preços Oracle","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"exemplos-de-uso-do-uniswap-v3/","title":"Exemplos de uso do Uniswap V3","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"fornecimento-unilateral-com-uniswap-v2/","title":"Fornecimento unilateral ideal com Uniswap V2","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"adicionar-e-remover-liquidez-com-uniswap-v2/","title":"Como adicionar e remover liquidez com Uniswap V2","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"swap-com-uniswap-v2/","title":"Como realizar Swap com Uniswap V2","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"testes-com-echidna/","title":"Como realizar testes com Echidna","tags":["Intermediário"]}},{"frontmatter":{"suburl":"ignorar-verificacao-do-tamanho-do-contrato/","title":"Como ignorar a verificação do tamanho do contrato","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"repeticao-de-assinatura/","title":"Repetição de assinatura","tags":["Avançado","Hacks"]}},{"frontmatter":{"suburl":"manipular-timestamp-do-bloco/","title":"Manipulando o timestamp do bloco na blockchain","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ataque-front-running/","title":"Ataque utilizando a técnica front running","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"honeypot/","title":"Criar uma armadilha para hackers com a técnica honeypot","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ocultar-script-malicioso/","title":"Como um contrato malicioso esconde seu script","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"phishing-com-txorigin/","title":"Phishing com tx.origin","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"negacao-de-servico/","title":"Inutilizar um contrato através da negação de serviço","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"fonte-de-aleatoriedade/","title":"Fonte de Aleatoriedade","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"chamada-de-funcao-delegatecall/","title":"Chamada de função delegatecall","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"acessando-variaveis-privadas/","title":"Acessando variáveis privadas","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"auto-destruicao/","title":"Ataques com Auto-destruição","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"estouro-de-memoria/","title":"Ataques com estouro de memória","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ataque-de-reentrada/","title":"Ataque de reentrada, aprenda como funciona e como evitar","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"bloqueio-de-tempo-timelock/","title":"Criar um contrato com bloqueio de tempo","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"contrato-para-multichamadas/","title":"Criar contrato para Multichamada de funções","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"financiamento-coletivo-crowd-fund/","title":"Criar um sistema de financiamento coletivo","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"sistema-de-leilao-ingles-holandes/","title":"Criar um sistema de leilão inglês e holandês","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"canal-de-pagamento-bidirecional/","title":"Criar um Canal de pagamento bidirecional","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"canal-de-pagamento-unidirecional/","title":"Criar um Canal de pagamento unidirecional","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"gravar-dados-no-slot/","title":"Como gravar dados em qualquer slot","tags":["Intermediário","Aplicações"]}},{"frontmatter":{"suburl":"implantar-contrato-com-proxy/","title":"Como implantar qualquer contrato com Proxy","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"trabalhando-com-proxy/","title":"Trabalhando com Proxy","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"precomputar-endereco-contrato/","title":"Pré-computar endereço do Contrato com Create2","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"token-erc721/","title":"Criando nosso primeiro Token ERC721","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"token-erc20/","title":"Criando nosso primeiro Token ERC20","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-mapeamento-iteravel/","title":"Mapeamento Iterável","tags":["Intermediário","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-arvore-merkle/","title":"Árvore de Merkle","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-multi-assinatura/","title":"Carteira com Multi-Assinaturas","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-wallet/","title":"Carteira de Tokens","tags":["Iniciante","Aplicações"]}},{"frontmatter":{"suburl":"assinaturas-e-hashing-keccak/","title":"Verificando assinatura hashing com Keccak256","tags":["Intermediário","Avançado"]}},{"frontmatter":{"suburl":"abi/","title":"O que é ABI e para que serve?","tags":["Iniciante"]}},{"frontmatter":{"suburl":"import-e-libraries/","title":"Import e Libraries, para que servem?","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"criar-contrato-simples/","title":"Criar um contrato através de outro contrato","tags":["Intermediário"]}},{"frontmatter":{"suburl":"call-fallback-delegatecall/","title":"Call, Fallback, Delegatecall e chamadas de contratos","tags":["Intermediário"]}},{"frontmatter":{"suburl":"transfer-send-call/","title":"Enviar Ether com transfer, send e call","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"visibilidade-interface-pagavel/","title":"Visibilidade, Interfaces e Funções Pagáveis","tags":["Intermediário"]}},{"frontmatter":{"suburl":"evento-construtor-heranca/","title":"Evento, Construtor e Herança","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"tratamento-de-erros/","title":"Tratamento de erros de condições e exceções","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"funcoes/","title":"Funções e Modificadores","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"armazenamento/","title":"Armazenamento de Dados","tags":["Intermediário"]}},{"frontmatter":{"suburl":"estruturas/","title":"Estruturas - Struct","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"enum/","title":"Enum - Enumeradores","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"mapping-arrays/","title":"Mapping e Arrays","tags":["Iniciante"]}},{"frontmatter":{"suburl":"if-else-for-while/","title":"If, Else, For e While","tags":["Iniciante"]}},{"frontmatter":{"suburl":"ether-wei-gas/","title":"Ether, Wei e Taxa de Gas","tags":["Iniciante"]}},{"frontmatter":{"suburl":"variaveis/","title":"Entendendo as Variáveis","tags":["Iniciante"]}},{"frontmatter":{"suburl":"primeiro-aplicativo/","title":"Meu primeiro aplicativo","tags":["Iniciante","Aplicações"]}}]},"topicsYaml":{"topics":[{"desc":"Todos os conteúdos de nível iniciante estão disponíveis aqui","title":"Iniciante","url":"iniciante/"},{"desc":"Todos os conteúdos de nível intermediário estão disponíveis aqui","title":"Intermediário","url":"intermediario/"},{"desc":"Todos os conteúdos de nível avançado estão disponíveis aqui","title":"Avançado","url":"avancado/"},{"desc":"Todos os artigos referentes a exemplos de aplicações do Solidity, estão disponíveis aqui","title":"Aplicações","url":"aplicacoes/"},{"desc":"Todos os artigos referentes a exemplos de aplicação de hacks do Solidity, estão disponíveis aqui","title":"Hacks","url":"hacks/"},{"desc":"Todos os artigos referentes a exemplos de aplicação DeFi do Solidity, estão disponíveis aqui","title":"DeFi","url":"defi/"},{"desc":"Artigos de outras linguagens de programação, exemplos de interação entre a blockchain e aplicativos externos, estão disponíveis aqui","title":"Outros Artigos","url":"artigos/"}]}},"pageContext":{"suburl":"sistema-de-cofre/","postTopics":["Intermediário","DeFi"],"publishedAt":"18/07/2022","prevArticle":{"title":"Como criar um sistema de Staking de Recompensas","layout":"BlogPage","suburl":"sistema-de-staking/","author":["Matheus"],"tags":["Intermediário","Avançado","DeFi"],"publishedAt":"17/07/2022","modifiedAt":"20220717"},"nextArticle":{"title":"Como criar uma soma constante AMM","layout":"BlogPage","suburl":"soma-constante-amm/","author":["Matheus"],"tags":["Intermediário","DeFi"],"publishedAt":"20/07/2022","modifiedAt":"20220720"}}},"staticQueryHashes":["119291576","2330562257","4065828390"]}